home *** CD-ROM | disk | FTP | other *** search
/ Aminet 49 / Aminet 49 (2002)(GTI - Schatztruhe)[!][Jun 2002].iso / Aminet / util / misc / ReportPlus.lha / ReportPlus / source / f5.c < prev    next >
C/C++ Source or Header  |  2002-04-15  |  56KB  |  1,278 lines

  1. #include <exec/types.h>
  2. #include <clib/exec_protos.h>
  3. #include <intuition/intuition.h>
  4. #include <intuition/gadgetclass.h>
  5. #include <clib/intuition_protos.h>
  6. #include <libraries/gadtools.h>
  7. #include <clib/gadtools_protos.h>
  8. #include <libraries/expansion.h>
  9. #include <libraries/expansionbase.h>
  10. #include <libraries/configvars.h>
  11. #include <clib/expansion_protos.h>
  12. #include <graphics/gfx.h>
  13. #include <clib/graphics_protos.h>
  14.  
  15. #include <ctype.h>
  16. #include <stdlib.h>
  17. #include "rp.h"
  18. #include "boards.h"
  19.  
  20. #include <reaction/reaction.h>
  21. #include <gadgets/chooser.h>
  22. #include <pragmas/chooser_pragmas.h>
  23. #include <gadgets/string.h>
  24. #include <pragmas/string_pragmas.h>
  25. #include <gadgets/integer.h>
  26. #include <pragmas/integer_pragmas.h>
  27. #include <gadgets/checkbox.h>
  28. #include <pragmas/checkbox_pragmas.h>
  29. #include <gadgets/layout.h>
  30. #include <pragmas/layout_pragmas.h>
  31. #include <gadgets/button.h>
  32. #include <pragmas/button_pragmas.h>
  33. #include <images/label.h>
  34. #include <pragmas/label_pragmas.h>
  35. #include <proto/label.h>
  36. #include <classes/window.h>
  37. #include <pragmas/window_pragmas.h>
  38.  
  39. #define MANUFS 272
  40.  
  41. MODULE  ULONG                 querymanuf,
  42.                               queryproduct,
  43.                               boards,
  44.                               whichboard,
  45.                               precedence;
  46. MODULE  UWORD                 selectedmanuf   = 0,
  47.                               selectedproduct = 0;
  48. MODULE  struct ExpansionBase* ExpansionBase   = NULL;
  49. MODULE  TEXT                  cardnumber[10];
  50. MODULE  TEXT                  manuf_buffer[49],
  51.                               product_buffer[49];
  52. MODULE  ABOOL                 foundmanuf,
  53.                               foundproduct;
  54. MODULE  struct List           ManufChooserList;
  55. MODULE  struct ChooserNode*   ManufChooserNodePtr[1 + 1];
  56.  
  57. MODULE void checklibrary(ULONG whichmanuf, ULONG whichproduct);
  58. MODULE void checkinternal(ULONG whichmanuf, ULONG whichproduct);
  59. MODULE void nomanuf(void);
  60. MODULE void noproduct(void);
  61. MODULE void runquery(ULONG whichmanuf, ULONG whichproduct);
  62. MODULE void updatemanuf(void);
  63. MODULE void autoquery(void);
  64.  
  65. // from rp.c
  66. IMPORT WORD              xsize;
  67. IMPORT ULONG             signal;
  68. IMPORT SBYTE             page;
  69. IMPORT ABOOL             fillwindows;
  70. IMPORT TEXT              IOBuffer[LONGESTFIELD + 1];
  71. IMPORT struct Window*    MainWindowPtr;
  72. IMPORT struct Library*   BoardsBase;
  73. IMPORT struct Screen*    ScreenPtr;
  74. IMPORT struct Library   *ButtonBase,
  75.                         *CheckBoxBase,
  76.                         *ChooserBase,
  77.                         *IntegerBase,
  78.                         *LabelBase,
  79.                         *LayoutBase,
  80.                         *StringBase,
  81.                         *WindowBase;
  82. IMPORT struct Menu*      MenuPtr;
  83. IMPORT Object*           WinObject[FUNCTIONS + 1];
  84.  
  85. MODULE struct
  86. {   UWORD manuf;
  87.     UBYTE product;
  88. } board[32]; // how many boards are simultaneously attachable?
  89.  
  90. AGLOBAL struct Gadget*   manuf_gadgets[GIDS_5 + 1];
  91.  
  92. STRPTR ManufOptions[1 + 1] =
  93. {   "Library, then internal",
  94.     "Internal, then library"
  95. };
  96.  
  97. MODULE struct
  98. {   ULONG  number[3];
  99.     UBYTE  howmany; // how many of the three numbers are registered.
  100.     // They go from left to right.
  101.     STRPTR name;
  102. } manuf[MANUFS + 1] =
  103. {
  104.  1012,    -1,    -1, 1, "Access Associates",
  105.  2003,    -1,    -1, 1, "ACDA",
  106.  2149,    -1,    -1, 1, "ACS",
  107.  2070,    -1,    -1, 1, "Active Circuits Inc.",
  108.  1017,    -1,    -1, 1, "ADA Research",
  109.  2056,  2061,    -1, 2, "Adept Development",
  110.  2057,    -1,    -1, 1, "Advanced Computer Design",
  111.  1046,    -1,    -1, 1, "Advanced Micro Innovations",
  112.  2102,    -1,    -1, 0, "Advanced Storage Systems",
  113.  2016,    -1,    -1, 1, "Akron Systems",
  114.  2083,    -1,    -1, 1, "Alberta Micro Electronic Center",
  115.  2130,    -1,    -1, 1, "Alfa-Laval",
  116.  2063,    -1,    -1, 1, "Alphatech",
  117.  2190,    -1,    -1, 1, "Altatech",
  118.  5010,    -1,    -1, 1, "Ambience Creation Technology",
  119.  2068,    -1,    -1, 1, "Amdev",
  120.  2025,  2094,    -1, 2, "American Liquid Light",
  121.  1053,    -1,    -1, 1, "Ameristar",
  122.  2118,    -1,    -1, 1, "The Amiga Centre",
  123.  2055,    -1,    -1, 1, "Amiga Solutions",
  124.  1019,  2041,    -1, 2, "Amigo Business Computers",
  125.  2176,    -1,    -1, 1, "AmiTrix Development",
  126.  2183,    -1,    -1, 1, "AMOK - Amiga Module & Oberon Klub",
  127.  2116,    -1,    -1, 1, "AMS",
  128.  1009,    -1,    -1, 1, "Anakin Research",
  129.  2007,  2121,    -1, 2, "Analog Electronics",
  130.  1061,    -1,    -1, 1, "Analog Precision or D&L Distributing",
  131.  2088,    -1,    -1, 1, "Applied Engineering",
  132.  2207,    -1,    -1, 1, "Applied Magic Inc.",
  133.  2028,  2054,    -1, 2, "Applied Systems & Peripherals/Xebec",
  134.  2132,    -1,    -1, 1, "Archos",
  135.  1023,    -1,    -1, 1, "ASDG Inc.",
  136.  1005,    -1,    -1, 1, "A-Squared",
  137.  2146,    -1,    -1, 1, "Atlantis",
  138.  2036,    -1,    -1, 1, "Atronic",
  139.  2143,    -1,    -1, 1, "Axellabs",
  140.  2160,    -1,    -1, 1, "bbdp Electronics",
  141.  2008,    -1,    -1, 1, "Bell & Howell",
  142.  2093,    -1,    -1, 1, "Bernd Culenfeld",
  143.  2084,    -1,    -1, 1, "Bestech",
  144.  2105,    -1,    -1, 1, "Beta Unlimited",
  145.  2069,    -1,    -1, 1, "Big Brother Security Systems",
  146.  1043,    -1,    -1, 1, "B. J. Freeman",
  147.  2098,    -1,    -1, 1, "Black Belt Systems",
  148.  1011,    -1,    -1, 1, "Bob Krauth",
  149.  2198,    -1,    -1, 1, "Bob Research Group",
  150.  2066,    -1,    -1, 1, "Bowden, Williams, Full & Assoc.",
  151.  2049,  2092,    -1, 2, "BSC (Elaborate Bytes)/Advanced Development Software",
  152.  2033,    -1,    -1, 1, "BVR",
  153.  2010,    -1,    -1, 1, "Byte Corp",
  154.  2050,    -1,    -1, 1, "C. Ltd",
  155.  2021,    -1,    -1, 0, "California Access (Synergy)",
  156.  2018,    -1,    -1, 1, "Calmos",
  157.  1055,    -1,    -1, 1, "Cardiac Pacemakers Inc.",
  158.  2095,    -1,    -1, 1, "CEGITES",
  159.  2074,    -1,    -1, 1, "The Checkered Ball",
  160.  2024,    -1,    -1, 1, "CH Electronics",
  161.  2114,    -1,    -1, 1, "C. H. Helfrich Electronik",
  162.  2082,    -1,    -1, 1, "Circum Design Inc.",
  163.  2077,    -1,    -1, 1, "Clartscreen Ltd. (UK)",
  164.  2044,    -1,    -1, 1, "Clearpoint Research",
  165.  1054,    -1,    -1, 1, "Cline Refrigeration",
  166. 26470, 49160,    -1, 0, "Combitec",
  167.   515,    -1,    -1, 0, "Combitech/MacroSystems USA",
  168.  2048,    -1,    -1, 1, "Commodore Braunschweig",
  169.   513,   514,    -1, 0, "Commodore Business Machines",
  170.  2134,    -1,    -1, 1, "Commodore Test Engineering Group",
  171.  1018,    -1,    -1, 1, "Computer Service Italia",
  172.  1026,  2052,    -1, 2, "Computer Tuning",
  173.  1006,    -1,    -1, 1, "Comspec Communications",
  174.  2204,    -1,    -1, 1, "Conspector Entertainment",
  175.  2182,    -1,    -1, 1, "CP Computer",
  176.  5011,    -1,    -1, 1, "Creative Development",
  177.  1058,    -1,    -1, 1, "CSA",
  178.  2122,    -1,    -1, 1, "Cumana",
  179.  2186,    -1,    -1, 1, "Cyborg Design Services",
  180.  2197,    -1,    -1, 1, "Cyon",
  181.  2029,    -1,    -1, 1, "Delaware Valley Software",
  182.  2161,    -1,    -1, 1, "Design Computer Systems",
  183.  1041,    -1,    -1, 1, "Design Labs",
  184.  1057,    -1,    -1, 1, "Diener, Wayne",
  185.  2060,    -1,    -1, 1, "Digital Art Systems",
  186.  2129,    -1,    -1, 1, "Digital Micronics",
  187.  2119,    -1,    -1, 1, "Digital Pacific",
  188.  2160,  2169,    -1, 2, "Digital Processing Systems",
  189.  2015,    -1,    -1, 1, "Digitronics",
  190.  2012,    -1,    -1, 1, "DKB Inc. (\"Michigan Software\")",
  191.  2129,    -1,    -1, 0, "DMI",
  192.  2019,    -1,    -1, 1, "Dover Research",
  193.  2064,    -1,    -1, 1, "Edotronik GmbH",
  194.  2206,    -1,    -1, 1, "Elbox Computer",
  195.  2174,    -1,    -1, 1, "Electronic Design",
  196.  2076,    -1,    -1, 1, "Elmtech Research Ltd. (UK)",
  197.  2005,    -1,    -1, 1, "Elthen Electronics",
  198.  2138,    -1,    -1, 1, "Evesham Micro Ltd.",
  199.  2096,    -1,    -1, 1, "EV Industries",
  200.  8290,    -1,    -1, 0, "Expansion Systems",
  201.  1014,  2062,    -1, 2, "Expansion Technologies (Pacific Cypress)",
  202.  2059,    -1,    -1, 1, "Expert Services",
  203.  2137,    -1,    -1, 1, "Faberushi",
  204.  2177,    -1,    -1, 1, "Ferranti",
  205.  2004,    -1,    -1, 1, "Finn R. Jacobsen",
  206.  4648,    -1,    -1, 1, "Flesch Hornemann Computer Elec.",
  207.  2125,    -1,    -1, 1, "For Your Eyes",
  208.  1015,    -1,    -1, 1, "Fuller Computers",
  209.  2201,    -1,    -1, 1, "Fulvio Ieva",
  210.  2187,    -1,    -1, 1, "G2 Systems",
  211.  1016,    -1,    -1, 1, "Galaxy Computers",
  212.  2079,    -1,    -1, 1, "Galysh Enterprises",
  213.  2081,    -1,    -1, 1, "GBS",
  214.  2142,    -1,    -1, 1, "GfxBase Inc.",
  215.  2109,    -1,    -1, 1, "Gigatron OHG",
  216.  2040,    -1,    -1, 1, "GIT",
  217.  2180,    -1,    -1, 1, "GPSoft Pty. Ltd.",
  218.  1051,    -1,    -1, 1, "GRC Electronics",
  219.  2017,  1761,  2193, 1, "Great Valley Peripherals",
  220.  2011,    -1,    -1, 0, "Hacker",
  221.  2158,    -1,    -1, 1, "HAL Software Hardware Handel",
  222.  2560,    -1,    -1, 0, "Harms",
  223.  2166,    -1,    -1, 1, "Hamren, Thomas",
  224.  2192,    -1,    -1, 1, "Hardware Design Udo Neuroth",
  225.  2195,    -1,    -1, 0, "Helfrich",
  226.  2075,    -1,    -1, 1, "Hi Tension Computer Services Ltd. (UK)",
  227.  2113,    -1,    -1, 1, "H. K. Computers",
  228.  2141,    -1,    -1, 1, "Hohabir, Daniel",
  229.  2038,    -1,    -1, 1, "Howitch",
  230.  1007,    -1,    -1, 1, "HT Electronics",
  231.  2121,    -1,    -1, 0, "Hydra Systems",
  232.  2071,    -1,    -1, 1, "ICD Inc.",
  233.  2133,    -1,    -1, 1, "Icom Simulations",
  234.  2104,    -1,    -1, 1, "Impulse Inc.",
  235.  2031,    -1,    -1, 1, "Incognito Software",
  236.  4626,    -1,    -1, 1, "Individual Computers",
  237.  1047,    -1,    -1, 1, "Industrial Support Services",
  238.  2151,    -1,    -1, 1, "Infinity Systems Design Group",
  239.  1025,    -1,    -1, 1, "Ing. Buero Kalawsky",
  240.  2195,    -1,    -1, 1, "Ingenieurbuero Helfrich",
  241.  2112,    -1,    -1, 1, "Interactive Video Systems",
  242.  1027,    -1,    -1, 1, "Interplan Unternehmensberatung",
  243.  2078,    -1,    -1, 1, "Interworks/Network",
  244.  2184,    -1,    -1, 1, "ITEK Neser & Sieber GbR",
  245.  5000,    -1,    -1, 1, "ITH",
  246.  2087,    -1,    -1, 1, "Ivis",
  247.  2112,    -1,    -1, 0, "IVS",
  248.  2032,    -1,    -1, 1, "Jadesign",
  249.  2175,    -1,    -1, 1, "James Cook University of North Queensland",
  250.  2052,    -1,    -1, 0, "Jochheim",
  251.  2180,    -1,    -1, 1, "Juergen Kommos",
  252.  2123,    -1,    -1, 1, "KAPS 2C Conception",
  253.  2009,    -1,    -1, 1, "Kochler, Roland",
  254.  2045,    -1,    -1, 1, "Kodiak",
  255.  2020,    -1,    -1, 1, "Krehbiel, David",
  256.  2043,    -1,    -1, 1, "Kruse, Ralph",
  257.  2073,  4680,    -1, 1, "Kupke Computertechnik GmbH/Golem",
  258.  1052,    -1,    -1, 1, "Lai, David",
  259.  2085,    -1,    -1, 1, "Lasar Fantasy",
  260.  2205,    -1,    -1, 1, "Laserforum",
  261.  2185,    -1,    -1, 1, "Lello, Phillip C.",
  262.  2178,    -1,    -1, 1, "Leviathan Development",
  263.  2065,    -1,    -1, 1, "Logical Design Works",
  264.  1030,    -1,    -1, 0, "Lowell University/Commodore Business Machines",
  265.  1060,    -1,    -1, 1, "Lucas, David",
  266.  2156,  4754,    -1, 2, "MacroSystems",
  267.   256, 18260,    -1, 0, "MacroSystems USA",
  268.  2159,    -1,    -1, 0, "Mainhattan-Data (A-Team)",
  269.  1081,    -1,    -1, 0, "Marc Michael Groth",
  270.  2194,    -1,    -1, 1, "Marpet Developments",
  271.  2157,    -1,    -1, 1, "Masoboshi GmbH",
  272.  2124,    -1,    -1, 1, "Mason, Mike",
  273.  1042,    -1,    -1, 1, "MCS",
  274.  2106,    -1,    -1, 1, "Memory Expansion Systems Ltd.",
  275.  2159,    -1,    -1, 1, "Michael Lamm Computersysteme",
  276.  1010,    -1,    -1, 1, "MicroBotics",
  277.  2135,    -1,    -1, 1, "Microcreations",
  278.  2042,    -1,    -1, 1, "Micro E Ab",
  279.  1003,    -1,    -1, 1, "The Micro-Forge",
  280.  2023,    -1,    -1, 1, "Micron Technology",
  281.  1020,    -1,    -1, 1, "Micro-Solutions Inc.",
  282.  2203,    -1,    -1, 1, "Micro System Devices",
  283.  2002,    -1,    -1, 1, "Mimetics Corp.",
  284.  1013,    -1,    -1, 1, "Mini Comp Systems Ltd.",
  285.  2189,    -1,    -1, 1, "MSPI (Markt & Technik)",
  286.  2131,    -1,    -1, 1, "Multigros A/S",
  287.  2072,    -1,    -1, 1, "Multi-Meg Electronique",
  288.  2196,    -1,    -1, 1, "The Neo Group",
  289.  2067,    -1,    -1, 1, "NES Inc.",
  290.  2111,    -1,    -1, 1, "New Technologies Group",
  291.  2191,    -1,    -1, 1, "NewTek",
  292.  2006,    -1,    -1, 1, "Nine Tiles Computer Systems Ltd.",
  293.  2181,    -1,    -1, 1, "O. Bausch",
  294.  1028,    -1,    -1, 1, "Ohlich, Peter",
  295.  1045,    -1,    -1, 1, "Oklahoma Personal Comp.",
  296.  2145,    -1,    -1, 1, "Omega Datentechnik",
  297.  2165,    -1,    -1, 1, "Overland Engineering",
  298.  2013,   211,    -1, 1, "Pacific Peripherals",
  299.  2030,    -1,    -1, 1, "Palomax",
  300.  2139,    -1,    -1, 1, "Panagolin Laser Software",
  301.  2110,    -1,    -1, 1, "PG Electronics",
  302.  2172,  8512,    -1, 1, "phase 5",
  303.  2046,  2101, 46504, 2, "Phoenix Electronics",
  304.  2108,    -1,    -1, 1, "Platypus Systems",
  305.  2155,    -1,    -1, 1, "Power Computing Ltd.",
  306.  2102,    -1,    -1, 1, "Preferred Technology",
  307.  1030,    -1,    -1, 1, "Productivity Center",
  308.  2026,   756,    -1, 1, "Progressive Peripherals and Software",
  309.  1049,    -1,    -1, 1, "Prolific Inc.",
  310.  2188,    -1,    -1, 1, "Pro System ComputerSysteme",
  311.  2148,    -1,    -1, 1, "Protar Electronics",
  312.  2086,    -1,    -1, 1, "Pulsar",
  313.  1267,    -1,    -1, 1, "RBM Digitaltechnik",
  314.  1008,    -1,    -1, 1, "RDS Software",
  315.  2100,  8448,    -1, 1, "ReadySoft",
  316.  2080,    -1,    -1, 1, "Realtime Games Software Ltd.",
  317. 43437,    -1,    -1, 0, "Reis-Ware",
  318.  2199,    -1,    -1, 1, "Richmond Sound Design Ltd.",
  319.  2144,    -1,    -1, 1, "Roctec Electronics Inc.",
  320.  2103,    -1,    -1, 1, "Rombo Productions",
  321.  1028,  4136,    -1, 0, "Ronin/Imtronics",
  322.  2140,    -1,    -1, 1, "Rudloff, Thomas",
  323.  8704,    -1,    -1, 0, "Sang/CT",
  324.  2128,    -1,    -1, 1, "Scott Advanced Micro Designs",
  325.  2037,    -1,    -1, 1, "Scott Karlin",
  326.  2208,    -1,    -1, 1, "SDL Ltd.",
  327.  2091,    -1,    -1, 1, "Seaview Software",
  328.  2055,    -1,    -1, 0, "Serial Solutions (Checkpoint Technologies)",
  329.  2136,    -1,    -1, 1, "Shoestring Productions",
  330.  1044,    -1,    -1, 1, "Side Effects Inc.",
  331.  2097,    -1,    -1, 1, "Silicon Peace",
  332.  2202,    -1,    -1, 1, "Silicon Studio",
  333.  2058,    -1,    -1, 1, "Sir Netics",
  334.  1050,    -1,    -1, 1, "Softeam Inc.",
  335.  2089,  2120,    -1, 2, "Solid State Design & Development/Solid State Leisure",
  336. 32768,    -1,    -1, 0, "SKI Peripherals",
  337.  2147,    -1,    -1, 1, "Skytec Computers",
  338.  2051,    -1,    -1, 1, "Spartanics",
  339.  2034,  2035,    -1, 2, "Spirit Technology",
  340.  2150,    -1,    -1, 0, "SRE",
  341.  1021,    -1,    -1, 1, "Stacar International",
  342.  2162,    -1,    -1, 1, "The Station",
  343.  2039,    -1,    -1, 1, "Sullivan Brothers Visual Engineers",
  344.  2164,  2170,    -1, 2, "Superformance Computer Engineering GmbH",
  345.  2127,    -1,    -1, 1, "Sunrize Industries",
  346.  2153,    -1,    -1, 1, "Suntec Inc.",
  347.  1056,  1004,    -1, 2, "Supra Corp. (Creative Microsystems)", // 1004 is also unofficially claimed by C. Ltd
  348.  2021,    -1,    -1, 1, "Synergy Peripheral Systems",
  349.  2014,    -1,    -1, 1, "Sysaphus Software",
  350.  1048,    -1,    -1, 1, "Technisoft",
  351.  1001,    -1,    -1, 1, "Tecmar",
  352.  1002,    -1,    -1, 1, "Telesys",
  353.  2168,    -1,    -1, 1, "Toolbox Design",
  354.  2152,    -1,    -1, 1, "Trade It",
  355.  2053,    -1,    -1, 1, "Trans Data Systems",
  356.  2128,    -1,    -1, 0, "Triceratops",
  357.  2154,    -1,    -1, 1, "Tritec Marketing",
  358.  1059,    -1,    -1, 1, "Trionix Inc.",
  359.  2179,    -1,    -1, 1, "United Video Inc.",
  360.  2150,    -1,    -1, 1, "University of Illinois",
  361.  2200,    -1,    -1, 1, "US Cybernetics",
  362.  2171,    -1,    -1, 1, "Utilities Unlimited",
  363.  1022,    -1,    -1, 1, "Video Precisions",
  364.  2167,    -1,    -1, 1, "Village Tronic",
  365.  2193,    -1,    -1, 1, "Viona Developments",
  366.  2090,    -1,    -1, 1, "Vision Quest",
  367.  2126,    -1,    -1, 1, "Volkmar Breitfeld Computersysteme",
  368.  2107,  8215,    -1, 1, "Vortex Computer Systems GmbH",
  369.  5001,    -1,    -1, 1, "VMC",
  370.  2027,    -1,    -1, 1, "Wicat Systems",
  371.  2163,    -1,    -1, 1, "Williams, Bryan",
  372.  2115,    -1,    -1, 1, "Xanadu",
  373.  2022,    -1,    -1, 1, "Xetec",
  374.  2117,    -1,    -1, 1, "X-Pert",
  375.  2099,    -1,    -1, 1, "Yaeger, Steve",
  376.  2047,    -1,    -1, 1, "?", // `no name shown'
  377. };
  378.  
  379. #define PRODUCTS 174
  380. struct
  381. {   ULONG  manufid,
  382.            number[2];
  383.     STRPTR name;
  384.     STRPTR desc;
  385. } product[PRODUCTS + 1] =
  386. {
  387.  2026, 150,  -1, "Zeus 040",                            "68040 accelerator + 32-bit expansion memory + SCSI host adapter", 1056,  12,  -1, "WordSync HD Interface",               "SCSI host adapter",
  388.  2203,  19,  -1, "Warp Engine",                         "68040 accelerator + 32-bit expansion memory",
  389.   256,  19,  -1, "Warp Engine",                         "68040 accelerator + 32-bit expansion memory",
  390.  1010,  68,  -1, "VXL RAM*32",                          "32-bit expansion memory",
  391.  1010,  69,  -1, "VXL 30",                              "68030/6888x accelerator",
  392.  2064,   8,  -1, "VME-Bus Controller",                  "VME-bus interface board",
  393. 18260,   4,  -1, "VLab Y/UV Digitizer",                 "Video digitizer board",
  394.  2117,   2,  -1, "Visiona",                             "Graphics board (I/O area)",
  395.  2117,   1,  -1, "Visiona",                             "Graphics board (memory area)",
  396.  2113, 227,  -1, "Vektor I/O",                          "I/O board",
  397.  2112, 243,  -1, "Vector",                              "68030/68882 accelerator + 32-bit expansion memory",
  398.  2112,  48,  -1, "TrumpCard Classic",                   "SCSI host adapter",
  399.  2112,  52,  -1, "TrumpCard Pro/Grand Slam",            "SCSI host adapter",
  400.  1056,  10,  -1, "SupraRAM",                            "16-bit expansion memory",
  401.  1056,   1,  -1, "SupraDrive 4x4 SCSI",                 "SCSI host adapter",
  402.  1010,   2,  -1, "StarDrive",                           "SCSI host adapter",
  403.  1010,   0,  -1, "StarBoard 2",                         "16-bit expansion memory",
  404. 46504,  33,  -1, "ST506 Autoboot",                      "MFM controller",
  405.  2101,  33,  -1, "ST506 Autoboot",                      "MFM controller",
  406. 49160,  43,  -1, "SRAM Card",                           "Memory board",
  407.  2034,   3,  -1, "SIN500",                              "16-bit expansion memory",
  408.  2012,   9,  -1, "SecureKey",                           "Access control board",
  409. 32768, 128,  -1, "SCSI + Dual Serial",                  "SCSI host adapter/serial board",
  410. 46504,  34,  -1, "SCSI Autoboot",                       "SCSI host adapter",
  411.  2101,  34,  -1, "SCSI Autoboot",                       "SCSI host adapter",
  412.  2073,   2,  -1, "SCSI",                                "SCSI host adapter",
  413. 43437,  17,  -1, "Scan King",                           "Scanner",
  414.   514,  96,  -1, "Romulator",                           "?",
  415. 18260,  16,  -1, "Retina Z3",                           "Graphics board",
  416. 18260,   6,  -1, "Retina",                              "Graphics board",
  417.  2129,   1,  -1, "Resolver",                            "Graphics board",
  418.  2088,  16,  -1, "RAM Works",                           "16-bit expansion memory",
  419.  2052,   1,  -1, "RAM Board",                           "16-bit expansion memory",
  420.  2022,   2,  -1, "RAM Board",                           "16-bit expansion memory",
  421.  1023,   1,   2, "RAM Board",                           "16-bit expansion memory",
  422.  2011,   2,  -1, "Quicknet QN2000",                     "Ethernet LAN board",
  423.  2064,   6,  -1, "PIC Prototyping Board",               "Prototyping board",
  424.  2195,  11,  -1, "Piccolo SD64",                        "Graphics board (I/O area)",
  425.  2195,  10,  -1, "Piccolo SD64",                        "Graphics board (memory area)",
  426.  2195,   6,  -1, "Piccolo",                             "Graphics board (I/O area)",
  427.  2195,   5,  -1, "Piccolo",                             "Graphics board (memory area)",
  428.  2167,  13,  -1, "Picasso ][",                          "Graphics board (segmented area)",
  429.  2167,  12,  -1, "Picasso ][",                          "Graphics board (I/O area)",
  430.  2167,  11,  -1, "Picasso ][",                          "Graphics board (memory area)",
  431.  2112,  16,  -1, "OverDrive",                           "SCSI host adapter",
  432.  4680,   1,  -1, "Omti HD Controller",                  "MFM controller",
  433.  2073,   1,  -1, "Omti HD Controller",                  "MFM controller",
  434.  2092,   5,  -1, "Oktagon",                             "SCSI host adapter",
  435.  2034,   6,  -1, "OctaByte",                            "16-bit expansion memory",
  436.  2102,   1,  -1, "Nexus",                               "SCSI host adapter",
  437.  2128,   1,  -1, "Multiport I/O",                       "I/O board",
  438.  2176,   1,  -1, "Multi-I/O",                           "I/O board",
  439.  2092,  16,  17, "MultiFaceCard",                       "Serial/parallel board",
  440.  2092,  18,  -1, "MultiFaceCard ]I[",                   "Serial/parallel board",
  441.  2112,  64,  -1, "Meta-4",                              "16-bit expansion memory",
  442.  2092,   8,  -1, "Memory Master",                       "16-bit expansion memory",
  443.  2073,   3,  -1, "Memory Expansion",                    "16-bit expansion memory",
  444. 46504, 190,  -1, "Memory Board",                        "16-bit expansion memory",
  445.  2101, 190,  -1, "Memory Board",                        "16-bit expansion memory",
  446.  1010, 129, 193, "MBX 1200",                            "32-bit expansion memory",
  447.  2021,   1,  -1, "Malibu SCSI",                         "SCSI host adapter",
  448.  1058,  17,  -1, "Magnum 040",                          "68040 accelerator + 32-bit expansion memory",
  449.  8704,   1,  -1, "Link-Interface",                      "Transputer link interface",
  450.  1005,   1,  -1, "LIVE! A2000",                         "Video digitizer board",
  451.  2050,   4,  -1, "Kronos 2000",                         "SCSI host adapter",
  452.  1004,   4,  -1, "Kronos 2000",                         "SCSI host adapter",
  453.  2092,  65,  -1, "ISDN-Master",                         "ISDN board",
  454.  2034,   1,  -1, "Insider IN1000",                      "16-bit expansion memory",
  455.  2034,   2,  -1, "Insider IN500",                       "16-bit expansion memory",
  456.  2034,   8,  -1, "Inmate SCSI/FPU/RAM",                 "?",
  457.  2017,  32,  -1, "Impact Vision 24",                    "Graphics board",
  458.  2017,  11,  -1, "Impact Series ][ SCSI (DPRC)",        "SCSI host adapter (or I/O extender)",
  459.  2017,   3,  -1, "Impact Series I SCSI 16K/3",          "SCSI host adapter",
  460.  2017,   2,  -1, "Impact Series I SCSI 16K/2",          "SCSI host adapter",
  461.  2017,   1,  -1, "Impact Series I SCSI 4K",             "SCSI host adapter",
  462.  1761,   8,  -1, "Impact SCSI",                         "SCSI host adapter",
  463.  2017,   8,  13, "Impact A3001 IDE HD",                 "68030/68882 accelerator + IDE controller",
  464.  2064,   1,  -1, "IEEE-488 Controller",                 "IEEE-488 interface board",
  465.  2159,   1,  -1, "IDE",                                 "IDE controller",
  466.  2121,   1,  -1, "Hydra Ethernet",                      "Ethernet LAN board",
  467.  4136,  57,  87, "Hurricane 2800",                      "68030/6888x accelerator + 32-bit expansion memory",
  468.  1028,  57,  87, "Hurricane 2800",                      "68030/6888x accelerator + 32-bit expansion memory",
  469.  2064,   3,  -1, "High-Speed Multiserial Interface",    "Serial board",
  470.   211,  10,  -1, "HD Controller",                       "SCSI host adapter",
  471. 49160,  42,  -1, "HD Controller",                       "SCSI host adapter",
  472.  2034,   4,  -1, "HDA-506",                             "MFM controller",
  473.  1010, 150, 158, "HardFrame/2000",                      "SCSI host adapter",
  474.  2112,   4,  -1, "GrandSlam",                           "SCSI/parallel/serial board",
  475.  1023, 255,  -1, "GPIB or Dual Serial Board",           "IEEE-488 or Twin-X serial card",
  476.  8215,   8,  -1, "GoldenGate 386SX RAM",                "80386SX bridgeboard/Amiga shared RAM",
  477.  8215,   7,  -1, "GoldenGate 386SX",                    "80386SX bridgeboard",
  478.  2150,   1,  -1, "GoldenGate ][",                       "Zorro ][-ISA bridgeboard",
  479.  2017, 255,  -1, "G-Force 040 I/O ('040/2000)",         "Serial/parallel board",
  480.  2142,   0,  -1, "GDA-1 VRAM",                          "Graphics board",
  481.  2142,   1,  -1, "GDA-1",                               "Graphics board",
  482.  2104,   0,  -1, "Firecracker",                         "Frame buffer",
  483.  2092,  32,  -1, "Frame Buffer",                        "Graphics board",
  484.  2022,   1,  -1, "FastTrak HD",                         "SCSI host adapter",
  485.  8512,  10,  -1, "FastLane Z3",                         "SCSI host adapter + 32-bit expansion memory",
  486.  2022,   3,  -1, "FastCard + HD Controller",            "?",
  487.  2067,   0,  -1, "Expansion RAM",                       "16-bit expansion memory",
  488.   756,   2,  -1, "EXP8000",                             "16-bit expansion memory",
  489.  1053,   1,  -1, "Ethernet",                            "Ethernet LAN board",
  490.  2193,   1,  -1, "EGS Spectrum",                        "Graphics board (I/O area)",
  491.  2193,   2,  -1, "EGS Spectrum",                        "Graphics board (memory area)",
  492.  1004,  14,  -1, "Escort",                              "SCSI host adapter",
  493.  1023, 254,  -1, "EB-920 LanRover",                     "Ethernet LAN board",
  494.  1009,   1,  -1, "Easyl",                               "Graphics tablet",
  495.  2064,   9,  -1, "DSP96000 Real Time Data Acquisition", "Data acquisition board",
  496.  2088,  16,  -1, "DL2000",                              "Modem",
  497.  2055,   0,  -1, "Dual Port Serial",                    "Serial board",
  498.  2129,   6,  -1, "Digital Broadcaster 32",              "Image processing board",
  499.  8290,   1,  -1, "DataFlyer 500 SCSI",                  "SCSI host adapter",
  500.  8512,  34,  -1, "CyberVision 64",                      "Graphics board",
  501.  8512,  11,  -1, "CyberStorm",                          "68040 accelerator + 32-bit expansion memory",
  502.  2176,   2,  -1, "CD-RAM",                              "16-bit expansion memory",
  503.  2010,   0,  -1, "Byte Box A500",                       "?",
  504.  8512,  24,  -1, "Blizzard A2060",                      "68060 accelerator + 32-bit expansion memory",
  505.  8512,  17,  -1, "Blizzard 1230",                       "68030/68882 accelerator + 32-bit expansion memory",
  506.  8512,   2,  -1, "Blizzard Turbo",                      "Accelerator board (I/O area)",
  507.  8512,   1,  -1, "Blizzard Turbo",                      "Accelerator board (memory area)",
  508.  2034,   5,  -1, "AX-S IBM Hardware I/O Board",         "I/O board",
  509.  1006,   1,  -1, "AX2000",                              "16-bit expansion memory",
  510.  8448,   1,  -1, "A-Max ][+/A-Max IV",                  "Macintosh emulation board",
  511.  2049,   3,  -1, "ALF 3 SCSI",                          "SCSI host adapter",
  512.  2049,   2,  -1, "ALF 2 SCSI",                          "SCSI host adapter",
  513.  2049,   1,  -1, "ALF 2",                               "MFM controller",
  514.  2071,   1,  -1, "Advantage 2000/AdSCSI",               "SCSI host adapter",
  515.  2167, 201,  -1, "Adriadne",                            "Ethernet LAN + I/O board",
  516.  2071,   4,  -1, "AdRAM 2080",                          "16-bit expansion memory",
  517.  2071,   3,  -1, "AdIDE",                               "IDE controller",
  518.   514,  84,  -1, "A4091",                               "SCSI host adapter",
  519.  1053,  10,  -1, "A4066",                               "Ethernet LAN board",
  520.   514,  97,  -1, "A3000 test fixture",                  "?",
  521.   514,  81,  -1, "A2630",                               "68030/68882 accelerator + 32-bit expansion memory",
  522.   514,  80,  -1, "A2620",                               "68020/68851/6888x accelerator + 32-bit expansion memory",
  523.  1030,   0,  -1, "A2410",                               "Graphics board",
  524.   513, 103,  -1, "A2386SX",                             "80386SX bridgeboard",
  525.   513,   2,  -1, "A2286",                               "80286 bridgeboard",
  526.   514,  70,  -1, "A2232",                               "Serial board",
  527.   514,  69,  -1, "A2232 prototype",                     "Serial board",
  528.   514,   3,  -1, "A2091",                               "SCSI host adapter",
  529.   514,   4,  -1, "A2090B",                              "Autoboot card",
  530.   515,   3,  -1, "A2090/A2090A",                        "MFM controller + SCSI host adapter with new driver",
  531.   514,   1,  -1, "A2090/A2090A",                        "MFM controller + SCSI host adapter",
  532.   513,   1,  -1, "A2088/A2286",                         "8088/80286 bridgeboard",
  533.   514, 112,  -1, "A2065",                               "Ethernet LAN board",
  534.  1053,   9,  -1, "A2060 Arcnet",                        "Arcnet LAN board",
  535.   514,   9,  -1, "A2060",                               "Arcnet LAN board",
  536.   514,  10,  -1, "A205x/A2091/A590",                    "16-bit expansion memory",
  537.  2560, 208,  -1, "A2000 Turboboard 3500 Professional",  "68030/68882 accelerator + 32-bit expansion memory",
  538.  1056,   3,  -1, "A2000 DMA HD Interface",              "SCSI host adapter",
  539.  2017,  22,  -1, "A2000 060 Combo",                     "68060 accelerator + 32-bit expansion memory",
  540.  1004,  12,  -1, "A1000/A2000 SCSI",                    "SCSI host adapter",
  541.  2050,  12,  -1, "A1000 SCSI",                          "SCSI host adapter",
  542.  1056,   2,  -1, "A1000 RAM Expansion",                 "16-bit expansion memory",
  543.   514,   2,  -1, "A590",                                "SCSI host adapter/XT controller",
  544.   514,  32,  -1, "A560",                                "16-bit expansion memory",
  545.  1056,  13,  -1, "A500 ByteSync HD Interface",          "SCSI host adapter",
  546.  1056,   8,  -1, "A500 Autoboot HD Interface",          "SCSI host adapter",
  547.  2073,   5,  -1, "68030 (asynchronous)",                "68030/6888x accelerator",
  548.  2073,   4,  -1, "68030 (synchronous)",                 "68030/6888x accelerator",
  549.  2064,   2,  -1, "8032 Development Adapter",            "CBM-8032 board?",
  550.  1056,  16,  -1, "2400zi+",                             "Modem",
  551.  1056,  11,  -1, "2400zi",                              "Modem",
  552.  1056,   9,  -1, "500/2000 RX",                         "16-bit expansion memory",
  553.  1056,   5,  -1, "500 HD/RAM",                          "SCSI host adapter + 16-bit expansion memory",
  554.  2026, 105,  -1, "040/A2000 Board",                     "68040 accelerator + 32-bit expansion memory",
  555.  2064,   5,  -1, "32-Bit Parallel I/O Interface",       "Parallel board",
  556.  2064,   4,  -1, "24-Bit Real Time Video Digitizer",    "Video digitizer board",
  557.  2064,   7,  -1, "16-Channel ADC Interface",            "Analog to digital board",
  558.  1058,  21,  -1, "12 Gauge",                            "68030/68882 accelerator + 32-bit expansion memory",
  559.  1010,   4,  -1, "8-UP! (Z)",                           "16-bit expansion memory",
  560.  1010,   3,  -1, "8-UP! (A)",                           "16-bit expansion memory"
  561. };
  562.  
  563. MODULE void runquery(ULONG whichmanuf, ULONG whichproduct)
  564. {   /* This function takes a manufacturer and product ID and attempts
  565.     to update the text gadgets with a relevant text description.
  566.  
  567.     If ~0 (-1) is passed for either the manufacturer or product ID,
  568.     the function returns instantly without doing anything. */
  569.  
  570.     selectedmanuf   =
  571.     selectedproduct = (UWORD) ~0;
  572.  
  573.     if (whichmanuf == (ULONG) ~0 || whichproduct == (ULONG) ~0)
  574.     {   return;
  575.     }
  576.  
  577.     SetGadgetAttrs
  578.     (   manuf_gadgets[GID_5_CB1], MainWindowPtr, NULL,
  579.         GA_Selected, FALSE,
  580.         TAG_END
  581.     );
  582.     SetGadgetAttrs
  583.     (   manuf_gadgets[GID_5_CB2], MainWindowPtr, NULL,
  584.         GA_Selected, FALSE,
  585.         TAG_END
  586.     );
  587.  
  588.     if (precedence == 1)
  589.     {   checkinternal(whichmanuf, whichproduct);
  590.         if (foundmanuf) // found int. manuf, maybe int. product
  591.         {   if (!foundproduct) // found int. manuf but not int. product
  592.             {   noproduct();
  593.         }   }
  594.         else
  595.         {   checklibrary(whichmanuf, whichproduct);
  596.             if (!foundmanuf)
  597.             {   nomanuf();
  598.                 noproduct();
  599.     }   }   }
  600.     else
  601.     {   assert(precedence == 0);
  602.         checklibrary(whichmanuf, whichproduct);
  603.         if (!foundmanuf) // can't find lib. manuf/product
  604.         {   checkinternal(whichmanuf, whichproduct);
  605.             if (foundmanuf) // found int. manuf, maybe int. product
  606.             {   if (!foundproduct) // found int. manuf but not int. product
  607.                 {   noproduct();
  608.             }   }
  609.             else
  610.             {   nomanuf();
  611.                 noproduct();
  612. }   }   }   }
  613.  
  614. MODULE void updatemanuf(void)
  615. {   if (whichboard == 0)
  616.     {   SetGadgetAttrs
  617.         (   manuf_gadgets[GID_5_BU2], MainWindowPtr, NULL,
  618.             GA_Disabled, TRUE,
  619.             TAG_END
  620.         );
  621.     } else
  622.     {   SetGadgetAttrs
  623.         (   manuf_gadgets[GID_5_BU2], MainWindowPtr, NULL,
  624.             GA_Disabled, FALSE,
  625.             TAG_END
  626.         );
  627.     }
  628.  
  629.     if (whichboard < boards)
  630.     {   SetGadgetAttrs // next card
  631.         (   manuf_gadgets[GID_5_BU3], MainWindowPtr, NULL,
  632.             GA_Disabled, FALSE,
  633.             TAG_END
  634.         );
  635.         SetGadgetAttrs // manuf ID
  636.         (   manuf_gadgets[GID_5_IN1], MainWindowPtr, NULL,
  637.             GA_Disabled, TRUE,
  638.             INTEGER_Number, board[whichboard].manuf,
  639.             TAG_END
  640.         );
  641.         SetGadgetAttrs // product ID
  642.         (   manuf_gadgets[GID_5_IN2], MainWindowPtr, NULL,
  643.             GA_Disabled, TRUE,
  644.             INTEGER_Number, board[whichboard].product,
  645.             TAG_END
  646.         );
  647.         stcl_d(cardnumber, whichboard + 1);
  648.         SetGadgetAttrs // card
  649.         (   manuf_gadgets[GID_5_ST1], MainWindowPtr, NULL,
  650.             STRINGA_TextVal, cardnumber,
  651.             TAG_END
  652.         );
  653.     } else
  654.     {   SetGadgetAttrs // next card
  655.         (   manuf_gadgets[GID_5_BU3], MainWindowPtr, NULL,
  656.             GA_Disabled, TRUE,
  657.             TAG_END
  658.         );
  659.         SetGadgetAttrs // manuf ID
  660.         (   manuf_gadgets[GID_5_IN1], MainWindowPtr, NULL,
  661.             GA_Disabled, FALSE,
  662.             INTEGER_Number, querymanuf,
  663.             TAG_END
  664.         );
  665.         SetGadgetAttrs // product ID
  666.         (   manuf_gadgets[GID_5_IN2], MainWindowPtr, NULL,
  667.             GA_Disabled, FALSE,
  668.             INTEGER_Number, queryproduct,
  669.             TAG_END
  670.         );
  671.         SetGadgetAttrs // card
  672.         (   manuf_gadgets[GID_5_ST1], MainWindowPtr, NULL,
  673.             STRINGA_TextVal, "Queryable",
  674.             TAG_END
  675.         );
  676.     }
  677.     runquery(board[whichboard].manuf, board[whichboard].product);
  678. }
  679.  
  680. AGLOBAL void manuf1(void)
  681. {   struct ConfigDev*   ThisConfigDev;
  682.     ULONG               i;
  683.     struct Hook         Hook5Struct;
  684.     
  685.     NewList(&ManufChooserList);
  686.     for (i = 0; i <= 1; i++)
  687.     {   if (!(ManufChooserNodePtr[i] = (struct ChooserNode *) AllocChooserNode(CNA_Text, ManufOptions[i], TAG_DONE)))
  688.         {   rq("Can't allocate chooser node!");
  689.         }
  690.         AddTail(&ManufChooserList, (struct Node *) ManufChooserNodePtr[i]);
  691.     } // automatically freed by ReAction at DisposeObject() time
  692.  
  693.     if (ExpansionBase = (struct ExpansionBase *) OpenLibrary(EXPANSIONNAME, 0))
  694.     {   /* Use FindConfigDev() to get info on the first expansion board on
  695.         the list maintained by Exec. */
  696.  
  697.         if (ThisConfigDev = FindConfigDev(NULL, -1, -1))
  698.         {   board[0].manuf = ThisConfigDev->cd_Rom.er_Manufacturer;
  699.             board[0].product = ThisConfigDev->cd_Rom.er_Product;
  700.             boards = 1;
  701.  
  702.             /* OK, there is at least one board, so loop and get the
  703.             entire list. */
  704.             while (ThisConfigDev = FindConfigDev(ThisConfigDev, -1, -1))
  705.             {   board[boards].manuf = ThisConfigDev->cd_Rom.er_Manufacturer;
  706.                 board[boards++].product = ThisConfigDev->cd_Rom.er_Product;
  707.         }   }
  708.         else boards = 0;
  709.         CloseLibrary((struct Library *) ExpansionBase);
  710.     }
  711.  
  712.     /* Create the window object. */
  713.     lockscreen();
  714.     gadtools();
  715.     InitHook(&Hook5Struct, Hook5Func, NULL);
  716.     if (!(WinObject[5] =          NewObject(WINDOW_GetClass(), NULL,
  717.     // window
  718.     WA_PubScreen,                 ScreenPtr,
  719.     WA_ScreenTitle,               "Report+",
  720.     WA_Title,                     "Report+: Manufacturer IDs",
  721.     WA_Activate,                  TRUE,
  722.     WA_DepthGadget,               TRUE,
  723.     WA_DragBar,                   TRUE,
  724.     WA_CloseGadget,               TRUE,
  725.     WA_SizeGadget,                TRUE,
  726.     WA_IDCMP,                     IDCMP_RAWKEY,
  727.     WA_Width,                     xsize, // kludge
  728.     WINDOW_IDCMPHook,             &Hook5Struct,
  729.     WINDOW_IDCMPHookBits,         IDCMP_RAWKEY,
  730.     WINDOW_MenuStrip,             MenuPtr,
  731.     WINDOW_Position,              WPOS_CENTERSCREEN,
  732.     WINDOW_ParentGroup,           manuf_gadgets[GID_5_LY1] =
  733.     NewObject
  734.     (   LAYOUT_GetClass(),        NULL,
  735.         // root-layout
  736.         LAYOUT_Orientation,       LAYOUT_ORIENT_VERT,
  737.         LAYOUT_SpaceOuter,        TRUE,
  738.         LAYOUT_DeferLayout,       TRUE,
  739.         LAYOUT_ShrinkWrap,        TRUE,
  740.         LAYOUT_AddChild,          NewObject
  741.         (   LAYOUT_GetClass(),    NULL,
  742.             // layout
  743.             LAYOUT_Orientation,   LAYOUT_ORIENT_HORIZ,
  744.             LAYOUT_SpaceOuter,    TRUE,
  745.             LAYOUT_VertAlignment, LALIGN_CENTER,
  746.             LAYOUT_HorizAlignment,LALIGN_CENTER,
  747.             LAYOUT_BevelStyle,    BVS_NONE,
  748.             LAYOUT_AddChild,
  749.             NewObject
  750.             (   LAYOUT_GetClass(),    NULL,
  751.                 // layout
  752.                 LAYOUT_Orientation,   LAYOUT_ORIENT_VERT,
  753.                 LAYOUT_SpaceOuter,    TRUE,
  754.                 LAYOUT_VertAlignment, LALIGN_CENTER,
  755.                 LAYOUT_HorizAlignment,LALIGN_LEFT,
  756.                 LAYOUT_BevelStyle,    BVS_NONE,
  757.                 LAYOUT_AddChild,
  758.                 NewObject
  759.                 (   LAYOUT_GetClass(),        NULL,
  760.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  761.                     LAYOUT_SpaceOuter,        TRUE,
  762.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  763.                     LAYOUT_BevelStyle,        BVS_FIELD,
  764.                     LAYOUT_AddImage,          NewObject
  765.                     (   LABEL_GetClass(),     NULL,
  766.                         LABEL_Text,           "Card:",
  767.                         LABEL_Justification,  LJ_RIGHT,
  768.                         TAG_END
  769.                     ),
  770.                     TAG_END
  771.                 ),
  772.                 LAYOUT_AddChild,
  773.                 NewObject
  774.                 (   LAYOUT_GetClass(),        NULL,
  775.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  776.                     LAYOUT_SpaceOuter,        TRUE,
  777.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  778.                     LAYOUT_BevelStyle,        BVS_FIELD,
  779.                     LAYOUT_AddImage,          NewObject
  780.                     (   LABEL_GetClass(),     NULL,
  781.                         LABEL_Text,           "Manufacturer:",
  782.                         LABEL_Justification,  LJ_RIGHT,
  783.                         TAG_END
  784.                     ),
  785.                     TAG_END
  786.                 ),
  787.                 LAYOUT_AddChild,
  788.                 NewObject
  789.                 (   LAYOUT_GetClass(),        NULL,
  790.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  791.                     LAYOUT_SpaceOuter,        TRUE,
  792.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  793.                     LAYOUT_BevelStyle,        BVS_FIELD,
  794.                     LAYOUT_AddImage,          NewObject
  795.                     (   LABEL_GetClass(),     NULL,
  796.                         // label
  797.                         LABEL_Text,           "Product:",
  798.                         LABEL_Justification,  LJ_RIGHT,
  799.                         TAG_END
  800.                     ),
  801.                     TAG_END
  802.                 ),
  803.                 LAYOUT_AddChild,
  804.                 NewObject
  805.                 (   LAYOUT_GetClass(),        NULL,
  806.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  807.                     LAYOUT_SpaceOuter,        TRUE,
  808.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  809.                     LAYOUT_BevelStyle,        BVS_FIELD,
  810.                     LAYOUT_AddImage,          NewObject
  811.                     (   LABEL_GetClass(),     NULL,
  812.                         // label
  813.                         LABEL_Text,           "Description:",
  814.                         LABEL_Justification,  LJ_RIGHT,
  815.                         TAG_END
  816.                     ),
  817.                     TAG_END
  818.                 ),
  819.                 TAG_END
  820.             ),
  821.             CHILD_WeightedWidth,          0,
  822.             LAYOUT_AddChild,
  823.             NewObject
  824.             (   LAYOUT_GetClass(),        NULL,
  825.                 // layout
  826.                 LAYOUT_Orientation,       LAYOUT_ORIENT_VERT,
  827.                 LAYOUT_SpaceOuter,        TRUE,
  828.                 LAYOUT_VertAlignment,     LALIGN_CENTER,
  829.                 LAYOUT_HorizAlignment,    LALIGN_LEFT,
  830.                 LAYOUT_BevelStyle,        BVS_NONE,
  831.                 LAYOUT_AddChild,          manuf_gadgets[GID_5_ST1] =
  832.                 NewObject
  833.                 (   STRING_GetClass(),    NULL,
  834.                     GA_ReadOnly,          TRUE,
  835.                     GA_ID,                GID_5_ST1,
  836.                     STRINGA_TextVal,      "-",
  837.                     STRINGA_MinVisible,   9,
  838.                     TAG_END
  839.                 ),
  840.                 LAYOUT_AddChild,          manuf_gadgets[GID_5_ST2] =
  841.                 NewObject
  842.                 (   STRING_GetClass(),    NULL,
  843.                     GA_ReadOnly,          TRUE,
  844.                     GA_ID,                GID_5_ST2,
  845.                     STRINGA_TextVal,      "-",
  846.                     TAG_END
  847.                 ),
  848.                 LAYOUT_AddChild,          manuf_gadgets[GID_5_ST3] =
  849.                 NewObject
  850.                 (   STRING_GetClass(),    NULL,
  851.                     GA_ReadOnly,          TRUE,
  852.                     GA_ID,                GID_5_ST3,
  853.                     STRINGA_TextVal,      "-",
  854.                     TAG_END
  855.                 ),
  856.                 LAYOUT_AddChild,          manuf_gadgets[GID_5_ST4] =
  857.                 NewObject
  858.                 (   STRING_GetClass(),    NULL,
  859.                     GA_ReadOnly,          TRUE,
  860.                     GA_ID,                GID_5_ST4,
  861.                     STRINGA_TextVal,      "-",
  862.                     TAG_END
  863.                 ),
  864.                 TAG_END
  865.             ),
  866.             CHILD_WeightedHeight,     0,
  867.             LAYOUT_AddChild,
  868.             NewObject
  869.             (   LAYOUT_GetClass(),    NULL,
  870.                 // layout
  871.                 LAYOUT_Orientation,   LAYOUT_ORIENT_VERT,
  872.                 LAYOUT_SpaceOuter,    TRUE,
  873.                 LAYOUT_VertAlignment, LALIGN_CENTER,
  874.                 LAYOUT_HorizAlignment,LALIGN_LEFT,
  875.                 LAYOUT_BevelStyle,    BVS_NONE,
  876.                 LAYOUT_AddImage,          NewObject
  877.                 (   LABEL_GetClass(),     NULL,
  878.                     LABEL_Text,           "",
  879.                     TAG_END
  880.                 ),
  881.                 LAYOUT_AddChild,
  882.                 NewObject
  883.                 (   LAYOUT_GetClass(),        NULL,
  884.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  885.                     LAYOUT_SpaceOuter,        TRUE,
  886.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  887.                     LAYOUT_VertAlignment,     LALIGN_BOTTOM,
  888.                     LAYOUT_BevelStyle,        BVS_NONE,
  889.                     LAYOUT_AddChild,
  890.                     NewObject
  891.                     (   LAYOUT_GetClass(),        NULL,
  892.                         LAYOUT_Orientation,       LAYOUT_ORIENT_VERT,
  893.                         LAYOUT_SpaceOuter,        TRUE,
  894.                         LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  895.                         LAYOUT_VertAlignment,     LALIGN_CENTER,
  896.                         LAYOUT_BevelStyle,        BVS_NONE,
  897.                         LAYOUT_AddImage,          NewObject
  898.                         (   LABEL_GetClass(),     NULL,
  899.                             // label
  900.                             LABEL_Text,           "_ID:",
  901.                             LABEL_Justification,  LJ_RIGHT,
  902.                             TAG_END
  903.                         ),
  904.                         TAG_END
  905.                     ),
  906.                     LAYOUT_AddChild,          manuf_gadgets[GID_5_IN1] =
  907.                     NewObject
  908.                     (   INTEGER_GetClass(),   NULL,
  909.                         GA_ID,                GID_5_IN1,
  910.                         GA_RelVerify,         TRUE,
  911.                         GA_TabCycle,          TRUE,
  912.                         INTEGER_Number,       querymanuf,
  913.                         INTEGER_Minimum,      0,
  914.                         INTEGER_Maximum,      65535,
  915.                         INTEGER_MinVisible,   5,
  916.                         TAG_END
  917.                     ),                                      
  918.                     TAG_END
  919.                 ),
  920.                 CHILD_WeightedHeight,         0,
  921.                 LAYOUT_AddChild,
  922.                 NewObject
  923.                 (   LAYOUT_GetClass(),        NULL,
  924.                     LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  925.                     LAYOUT_SpaceOuter,        TRUE,
  926.                     LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  927.                     LAYOUT_VertAlignment,     LALIGN_BOTTOM,
  928.                     LAYOUT_BevelStyle,        BVS_NONE,
  929.                     LAYOUT_AddChild,
  930.                     NewObject
  931.                     (   LAYOUT_GetClass(),        NULL,
  932.                         LAYOUT_Orientation,       LAYOUT_ORIENT_VERT,
  933.                         LAYOUT_SpaceOuter,        TRUE,
  934.                         LAYOUT_HorizAlignment,    LALIGN_RIGHT,
  935.                         LAYOUT_VertAlignment,     LALIGN_CENTER,
  936.                         LAYOUT_BevelStyle,        BVS_NONE,
  937.                         LAYOUT_AddImage,          NewObject
  938.                         (   LABEL_GetClass(),     NULL,
  939.                             // label
  940.                             LABEL_Text,           "I_D:",
  941.                             LABEL_Justification,  LJ_RIGHT,
  942.                             TAG_END
  943.                         ),
  944.                         TAG_END
  945.                     ),
  946.                     LAYOUT_AddChild,          manuf_gadgets[GID_5_IN2] =
  947.                     NewObject
  948.                     (   INTEGER_GetClass(),   NULL,
  949.                         GA_ID,                GID_5_IN2,
  950.                         GA_RelVerify,         TRUE,
  951.                         GA_TabCycle,          TRUE,
  952.                         INTEGER_Number,       queryproduct,
  953.                         INTEGER_Minimum,      0,
  954.                         INTEGER_Maximum,      255,
  955.                         INTEGER_MinVisible,   5,
  956.                         TAG_END
  957.                     ),
  958.                     TAG_END
  959.                 ),
  960.                 CHILD_WeightedHeight,     0,
  961.                 LAYOUT_AddImage,          NewObject
  962.                 (   LABEL_GetClass(),     NULL,
  963.                     LABEL_Text,           "",
  964.                     TAG_END
  965.                 ),
  966.                 TAG_END
  967.             ),
  968.             CHILD_WeightedWidth,          0,
  969.             TAG_END
  970.         ),
  971.         CHILD_WeightedHeight,             0,
  972.         LAYOUT_AddChild,
  973.         NewObject
  974.         (   LAYOUT_GetClass(),        NULL,
  975.             LAYOUT_Orientation,       LAYOUT_ORIENT_HORIZ,
  976.             LAYOUT_SpaceOuter,        TRUE,
  977.             LAYOUT_HorizAlignment,    LALIGN_CENTER,
  978.             LAYOUT_VertAlignment,     LALIGN_CENTER,
  979.             LAYOUT_BevelStyle,        BVS_FIELD,
  980.             LAYOUT_ShrinkWrap,        TRUE,
  981.             LAYOUT_AddImage,          NewObject
  982.             (   LABEL_GetClass(),     NULL,
  983.                 // label
  984.                 LABEL_Text,           "P_recedence:",
  985.                 LABEL_Justification,  LJ_RIGHT,
  986.                 TAG_END
  987.             ),
  988.             CHILD_WeightedWidth,      0,
  989.             LAYOUT_AddChild,          manuf_gadgets[GID_5_CH1] =
  990.             NewObject
  991.             (   CHOOSER_GetClass(),   NULL,
  992.                 GA_ID,                GID_5_CH1,
  993.                 GA_RelVerify,         TRUE, // otherwise we won't hear the gadget
  994.                 CHOOSER_PopUp,        TRUE,
  995.                 CHOOSER_Labels,       &ManufChooserList,
  996.                 CHOOSER_Selected,     (WORD) precedence,
  997.                 TAG_END
  998.             ),
  999.             CHILD_WeightedWidth,      0,
  1000.             LAYOUT_AddImage,          NewObject
  1001.             (   LABEL_GetClass(),     NULL,
  1002.                 LABEL_Text,           "",
  1003.                 TAG_END
  1004.             ),
  1005.             CHILD_WeightedWidth,      100,
  1006.             LAYOUT_AddChild,          manuf_gadgets[GID_5_CB1] =
  1007.             NewObject
  1008.             (   CHECKBOX_GetClass(),      NULL,
  1009.                 // button
  1010.                 GA_ID,                    GID_5_CB1,
  1011.                 GA_RelVerify,             TRUE,
  1012.                 GA_Disabled,              TRUE,
  1013.                 GA_Text,                  "Internal?",
  1014.                 TAG_END
  1015.             ),
  1016.             CHILD_WeightedWidth,          0,
  1017.             LAYOUT_AddChild,              manuf_gadgets[GID_5_CB2] =
  1018.             NewObject
  1019.             (   CHECKBOX_GetClass(),      NULL,
  1020.                 // button
  1021.                 GA_ID,                    GID_5_CB2,
  1022.                 GA_RelVerify,             TRUE,
  1023.                 GA_Disabled,              TRUE,
  1024.                 GA_Text,                  "Official?",
  1025.                 TAG_END
  1026.             ),
  1027.             CHILD_WeightedWidth,          0,
  1028.             TAG_END
  1029.         ),
  1030.         CHILD_WeightedHeight,             0,
  1031.         LAYOUT_AddChild,                  NewObject
  1032.         (   LAYOUT_GetClass(),            NULL,
  1033.             // layout
  1034.             LAYOUT_Orientation,           LAYOUT_ORIENT_HORIZ,
  1035.             LAYOUT_SpaceOuter,            TRUE,
  1036.             LAYOUT_VertAlignment,         LALIGN_CENTER,
  1037.             LAYOUT_HorizAlignment,        LALIGN_CENTER,
  1038.             LAYOUT_BevelStyle,            BVS_FIELD,
  1039.             LAYOUT_AddChild,              manuf_gadgets[GID_5_BU2] =
  1040.             NewObject
  1041.             (   NULL,                     "button.gadget",
  1042.                 // button
  1043.                 GA_ID,                    GID_5_BU2,
  1044.                 GA_RelVerify,             TRUE,
  1045.                 GA_Text,                  "_Previous Card",
  1046.                 TAG_END
  1047.             ),
  1048.             CHILD_WeightedWidth,          50,
  1049.             LAYOUT_AddChild,              manuf_gadgets[GID_5_BU3] =
  1050.             NewObject
  1051.             (   NULL,                     "button.gadget",
  1052.                 // button
  1053.                 GA_ID,                    GID_5_BU3,
  1054.                 GA_RelVerify,             TRUE,
  1055.                 GA_Text,                  "_Next Card",
  1056.                 TAG_END
  1057.             ),
  1058.             CHILD_WeightedWidth,          50,
  1059.             TAG_END
  1060.         ),
  1061.         TAG_END
  1062.     ),
  1063.     TAG_END
  1064.     )))
  1065.     {   rq("Can't create ReAction object(s)!");
  1066.     }
  1067.     unlockscreen();
  1068.  
  1069.     /* boards is the actual number of boards found. 0 to (board - 1).
  1070.     We actually use the [board] index as our 'spare' 'queryable' index. */
  1071.  
  1072.     openwindow();
  1073.     ActivateLayoutGadget(manuf_gadgets[GID_5_LY1], MainWindowPtr, NULL, (Object) manuf_gadgets[GID_5_IN1]);
  1074.     updatemanuf();
  1075.     loop();
  1076.     closewindow();
  1077. }
  1078.  
  1079. AGLOBAL void manuf_loop(ULONG gid)
  1080. {   switch(gid)
  1081.     {
  1082.     case GID_5_BU2:
  1083.         whichboard--;
  1084.         updatemanuf();
  1085.     break;
  1086.     case GID_5_BU3:
  1087.         whichboard++;
  1088.         updatemanuf();
  1089.     break;
  1090.     case GID_5_CH1:
  1091.         if (!(GetAttr
  1092.         (   CHOOSER_Selected, manuf_gadgets[GID_5_CH1], (ULONG *) &precedence
  1093.         )))
  1094.         {   rq("Unsupported inquiry!"); // should never happen
  1095.         }
  1096.         autoquery();
  1097.     break;
  1098.     case GID_5_IN1:
  1099.         autoquery();
  1100.     break;
  1101.     case GID_5_IN2:
  1102.         autoquery();
  1103.     break;
  1104.     default:
  1105.     break;
  1106. }   }
  1107.  
  1108. AGLOBAL void manuf_die(void)
  1109. {   IOBuffer[20] = (UBYTE) precedence;
  1110. }
  1111. AGLOBAL void manuf_config(void)
  1112. {   precedence = (ULONG) IOBuffer[20];
  1113. }
  1114.  
  1115. MODULE void checklibrary(ULONG whichmanuf, ULONG whichproduct)
  1116. {   foundmanuf = foundproduct = FALSE;
  1117.  
  1118.     if (BoardsBase)
  1119.     {   if (GetBoardName(manuf_buffer, product_buffer, NULL, whichmanuf, whichproduct))
  1120.         {   SetGadgetAttrs
  1121.             (   manuf_gadgets[GID_5_ST2], MainWindowPtr, NULL,
  1122.                 STRINGA_TextVal, manuf_buffer,
  1123.                 TAG_END
  1124.             );
  1125.             SetGadgetAttrs
  1126.             (   manuf_gadgets[GID_5_ST3], MainWindowPtr, NULL,
  1127.                 STRINGA_TextVal, product_buffer,
  1128.                 TAG_END
  1129.             );
  1130.             SetGadgetAttrs
  1131.             (   manuf_gadgets[GID_5_ST4], MainWindowPtr, NULL,
  1132.                 STRINGA_TextVal, "-",
  1133.                 TAG_END
  1134.             );
  1135.             foundmanuf = foundproduct = TRUE;
  1136.             return; // successful
  1137.     }   }
  1138.     return; // unsuccessful
  1139. }
  1140.  
  1141. MODULE void checkinternal(ULONG whichmanuf, ULONG whichproduct)
  1142. {   SWORD i, /* i must be signed and at least 16 bits wide */
  1143.           j;
  1144.  
  1145.     foundmanuf = foundproduct = FALSE;
  1146.     for (i = 0; i <= MANUFS; i++) // go through each manufacturer
  1147.     {   for (j = 0; j <= 2; j++)  // each manufacturer has up to 3 IDs
  1148.         {   if (whichmanuf == manuf[i].number[j])
  1149.             {   selectedmanuf = i;
  1150.                 foundmanuf = TRUE;
  1151.                 SetGadgetAttrs
  1152.                 (   manuf_gadgets[GID_5_ST2], MainWindowPtr, NULL,
  1153.                     STRINGA_TextVal, manuf[selectedmanuf].name,
  1154.                     TAG_END
  1155.                 );
  1156.                 SetGadgetAttrs
  1157.                 (   manuf_gadgets[GID_5_CB1], MainWindowPtr, NULL,
  1158.                     GA_Selected, TRUE,
  1159.                     TAG_END
  1160.                 );
  1161.                 // official gadget has been already cleared by this point
  1162.                 if (j < manuf[i].howmany)
  1163.                 {   SetGadgetAttrs
  1164.                     (   manuf_gadgets[GID_5_CB2], MainWindowPtr, NULL,
  1165.                         GA_Selected, TRUE,
  1166.                         TAG_END
  1167.                     );
  1168.                 }
  1169.  
  1170.                 selectedproduct = (UWORD) ~0;
  1171.                 for (i = 0; i <= PRODUCTS; i++)
  1172.                 {   if (whichmanuf == product[i].manufid)
  1173.                     {   for (j = 0; j <= 1; j++)
  1174.                         {   if (whichproduct == product[i].number[j])
  1175.                             {   selectedproduct = i;
  1176.                                 // show product details
  1177.                                 SetGadgetAttrs
  1178.                                 (   manuf_gadgets[GID_5_ST3], MainWindowPtr, NULL,
  1179.                                     STRINGA_TextVal, product[selectedproduct].name,
  1180.                                     TAG_END
  1181.                                 );
  1182.                                 SetGadgetAttrs
  1183.                                 (   manuf_gadgets[GID_5_ST4], MainWindowPtr, NULL,
  1184.                                     STRINGA_TextVal, product[selectedproduct].desc,
  1185.                                     TAG_END
  1186.                                 );
  1187.                                 foundproduct = TRUE;
  1188.                                 return; // found both
  1189.                 }   }   }   }
  1190.                 return; // found manuf only
  1191.     }   }   }
  1192.     return; // completely unsuccessful
  1193. }
  1194.  
  1195. MODULE void nomanuf(void)
  1196. {   SetGadgetAttrs
  1197.     (   manuf_gadgets[GID_5_ST2], MainWindowPtr, NULL,
  1198.         STRINGA_TextVal, "-",
  1199.         TAG_END
  1200.     );
  1201. }
  1202.  
  1203. MODULE void noproduct(void)
  1204. {   SetGadgetAttrs
  1205.     (   manuf_gadgets[GID_5_ST3], MainWindowPtr, NULL,
  1206.         STRINGA_TextVal, "-",
  1207.         TAG_END
  1208.     );
  1209.     SetGadgetAttrs
  1210.     (   manuf_gadgets[GID_5_ST4], MainWindowPtr, NULL,
  1211.         STRINGA_TextVal, "-",
  1212.         TAG_END
  1213.     );
  1214. }
  1215.  
  1216. AGLOBAL ULONG Hook5Func(struct Hook *h, VOID *o, VOID *msg)
  1217. {   /* "When the hook is called, the data argument points to the 
  1218.     window object and message argument to the IntuiMessage." */
  1219.  
  1220.     UWORD code, qual;
  1221.  
  1222.     geta4(); // wait till here before doing anything
  1223.  
  1224.     code = ((struct IntuiMessage *) msg)->Code;
  1225.     qual = ((struct IntuiMessage *) msg)->Qualifier;
  1226.  
  1227.     switch(code)
  1228.     {
  1229.     case SCAN_HELP:
  1230.         helpabout();
  1231.     break;
  1232.     case SCAN_ESCAPE:
  1233.         if ((qual & IEQUALIFIER_LSHIFT) || (qual & IEQUALIFIER_RSHIFT))
  1234.         {   cleanexit(EXIT_SUCCESS);
  1235.         } else page = 0;
  1236.     break;
  1237.     case SCAN_R:
  1238.         if (precedence == 0)
  1239.         {   precedence = 1;
  1240.         } else
  1241.         {   // assert(precedence == 1);
  1242.             precedence = 0;
  1243.         }
  1244.         SetGadgetAttrs
  1245.         (   manuf_gadgets[GID_5_CH1], MainWindowPtr, NULL,
  1246.             CHOOSER_Selected, (WORD) precedence,
  1247.             TAG_END
  1248.         );
  1249.         autoquery();
  1250.     break;
  1251.     case SCAN_I:
  1252.         ActivateLayoutGadget(manuf_gadgets[GID_5_LY1], MainWindowPtr, NULL, (Object) manuf_gadgets[GID_5_IN1]);
  1253.     break;
  1254.     case SCAN_D:
  1255.         ActivateLayoutGadget(manuf_gadgets[GID_5_LY1], MainWindowPtr, NULL, (Object) manuf_gadgets[GID_5_IN2]);
  1256.     break;
  1257.     default:
  1258.     break;
  1259.     }
  1260.  
  1261.     return(1);
  1262. }
  1263.  
  1264. MODULE void autoquery(void)
  1265. {   if (!(GetAttr
  1266.     (   INTEGER_Number, manuf_gadgets[GID_5_IN1], (ULONG *) &querymanuf
  1267.     )))
  1268.     {   rq("Unsupported inquiry!"); // should never happen
  1269.     }
  1270.     if (!(GetAttr
  1271.     (   INTEGER_Number, manuf_gadgets[GID_5_IN2], (ULONG *) &queryproduct
  1272.     )))
  1273.     {   rq("Unsupported inquiry!"); // should never happen
  1274.     }
  1275.     runquery(querymanuf, queryproduct);
  1276. }
  1277.  
  1278.